#include <stdio.h> //包括文件输入输出
#include <string.h>


struct Student
{
    int id;
    char name[20];
};

int main()
{
    //  打开一个文件
    //1、文件路径
    //  绝对路径:从系统根目录开始排列的路径
    //  相对路径:相对于运行程序的路径
    //  ./和运行程序在同一目录下
    //  文件名：文件的名称和后缀名组成
    //2、打开文件的参数
    //   w: 只写 ：文件不存在，就创建文件，如果存在。会清空文件
    //   r：只读 ：文件不存在就报错
    //   a:(append) 追加写：文件不存在就创建，如果存在，就在尾部继续写
    //   w+  a+  r+: 读写
    FILE* f = fopen("./test.txt","r");
    if(f == NULL) //打开文件失败：读的时候文件不存在   权限不够
    {
        printf("文件打开失败\n");
        return -1;
    }
    //fgetc 从文件中读取一个字符
    // char c = 0;
    // //EOF: end of file :文件末尾
    // while(( c = fgetc(f) )!= EOF)
    //     printf("%c",c);
    // printf("\n");

    // char s[] = "helloworld";
    //fputc :向文件中写入字符
    // char c = 0;
    // while((c = getchar()) != '\n')
    //     fputc(c,f);
    // fputc('\n',f);

    //fgets :从文件中读取字符串
    // char s[20] = {0};
    // fgets(s,20,f);//读n-1个字符，在这之前读到换行结束
    // printf("%s\n",s);

    //fputs : 向文件中写入一个字符串
    // fputs("helloworld",f);

    //fwrite : 向文件中写入一块数据
    // struct Student s = {1,"zhangsan"};
    // fwrite(&s,sizeof(s),1,f);

    //fread : 从文件里读取一块数据
    //_n ：读多少次 1
    // struct Student s;
    // fread(&s,sizeof(s),1,f);
    // printf("id : %d, name : %s\n",s.id,s.name);

    //移动光标
    //偏移量
    //移动光标置文件末尾
    //fseek(f,0,SEEK_END);
    // fseek(f,2,SEEK_SET);
    // printf("%c\n",fgetc(f));
    // fseek(f,-2,SEEK_END);
    //当前光标位置和首位置的偏移量
    // printf("%ld\n", ftell(f));

    //计算一个文件的大小
    // fseek(f,0,SEEK_END);
    // printf("%ld\n", ftell(f));



    //文件关闭
    fclose(f);
    return 0;
}